#include "BulletDynamics/ConstraintSolver/btUniversalConstraint.h"
#ifdef __cplusplus
extern "C" {
#endif
btUniversalConstraint* bullet_NewbtUniversalConstraint(btRigidBody* rbA,btRigidBody* rbB,btVector3* anchor,btVector3* axis1,btVector3* axis2){
	btRigidBody& c_arg_rbA=(btRigidBody&)(*rbA);
	btRigidBody& c_arg_rbB=(btRigidBody&)(*rbB);
	btVector3 const& c_arg_anchor=(btVector3 const&)(*anchor);
	btVector3 const& c_arg_axis1=(btVector3 const&)(*axis1);
	btVector3 const& c_arg_axis2=(btVector3 const&)(*axis2);
	btUniversalConstraint* wrap_out = new btUniversalConstraint(c_arg_rbA,c_arg_rbB,c_arg_anchor,c_arg_axis1,c_arg_axis2);
	return wrap_out;
}

btVector3* bullet_btUniversalConstraint_getAnchor(btUniversalConstraint* c_this){
	btVector3 const& c_out = c_this->getAnchor();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btUniversalConstraint_getAnchor2(btUniversalConstraint* c_this){
	btVector3 const& c_out = c_this->getAnchor2();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

double bullet_btUniversalConstraint_getAngle1(btUniversalConstraint* c_this){
	btScalar c_out = c_this->getAngle1();
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btUniversalConstraint_getAngle2(btUniversalConstraint* c_this){
	btScalar c_out = c_this->getAngle2();
	double wrap_out = (c_out);
	return wrap_out;
}

btVector3* bullet_btUniversalConstraint_getAxis1(btUniversalConstraint* c_this){
	btVector3 const& c_out = c_this->getAxis1();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btUniversalConstraint_getAxis2(btUniversalConstraint* c_this){
	btVector3 const& c_out = c_this->getAxis2();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

void bullet_btUniversalConstraint_setAxis(btUniversalConstraint* c_this,btVector3* axis1,btVector3* axis2){
	btVector3 const& c_arg_axis1=(btVector3 const&)(*axis1);
	btVector3 const& c_arg_axis2=(btVector3 const&)(*axis2);
	c_this->setAxis(c_arg_axis1,c_arg_axis2);
}

void bullet_btUniversalConstraint_setLowerLimit(btUniversalConstraint* c_this,double ang1min,double ang2min){
	btScalar c_arg_ang1min=ang1min;
	btScalar c_arg_ang2min=ang2min;
	c_this->setLowerLimit(c_arg_ang1min,c_arg_ang2min);
}

void bullet_btUniversalConstraint_setUpperLimit(btUniversalConstraint* c_this,double ang1max,double ang2max){
	btScalar c_arg_ang1max=ang1max;
	btScalar c_arg_ang2max=ang2max;
	c_this->setUpperLimit(c_arg_ang1max,c_arg_ang2max);
}

#ifdef __cplusplus
}
#endif
